/**
 * 格式化时间戳
 * @param timestamp 时间戳 (秒)
 * @param format 格式，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns 格式化后的日期时间字符串
 */
export function formatTimestamp(timestamp: number | string | null | undefined, format: string = 'YYYY-MM-DD HH:mm:ss'): string {
  if (timestamp === null || timestamp === undefined || timestamp === '') {
    return '--'; // 或者返回空字符串，根据需求
  }

  let tsNumber: number;
  if (typeof timestamp === 'string') {
    tsNumber = parseInt(timestamp, 10);
  } else {
    tsNumber = timestamp;
  }

  // 如果时间戳是秒为单位，转换为毫秒
  if (String(tsNumber).length === 10) {
    tsNumber *= 1000;
  }

  const date = new Date(tsNumber);

  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  const hours = date.getHours().toString().padStart(2, '0');
  const minutes = date.getMinutes().toString().padStart(2, '0');
  const seconds = date.getSeconds().toString().padStart(2, '0');

  let formattedDate = format;
  formattedDate = formattedDate.replace('YYYY', year.toString());
  formattedDate = formattedDate.replace('MM', month);
  formattedDate = formattedDate.replace('DD', day);
  formattedDate = formattedDate.replace('HH', hours);
  formattedDate = formattedDate.replace('mm', minutes);
  formattedDate = formattedDate.replace('ss', seconds);

  return formattedDate;
}

/**
 * 友好时间显示
 * 将时间转换为相对时间显示：
 * - 60秒内：x秒前
 * - 60分钟内：x分钟前  
 * - 今天内：x小时前
 * - 超过今天：MM-dd HH:mm 格式
 * @param dateTime 时间字符串，格式如 '2025-05-04 12:00:01' 或时间戳
 * @returns 友好时间字符串
 */
export function formatFriendlyTime(dateTime: string | number | Date | null | undefined): string {
  if (!dateTime) {
    return '--';
  }

  let targetDate: Date;
  
  try {
    if (typeof dateTime === 'string') {
      // 处理 '2025-05-04 12:00:01' 格式
      targetDate = new Date(dateTime.replace(/[：]/g, ':'));
    } else if (typeof dateTime === 'number') {
      // 处理时间戳
      const timestamp = String(dateTime).length === 10 ? dateTime * 1000 : dateTime;
      targetDate = new Date(timestamp);
    } else {
      targetDate = new Date(dateTime);
    }

    // 检查日期是否有效
    if (isNaN(targetDate.getTime())) {
      return dateTime.toString();
    }
  } catch (error) {
    return dateTime.toString();
  }

  const now = new Date();
  const diffMs = now.getTime() - targetDate.getTime();
  
  // 如果是未来时间，或者不是今天，返回月日时分格式
  if (diffMs < 0 || !isSameDay(targetDate, now)) {
    const month = (targetDate.getMonth() + 1).toString().padStart(2, '0');
    const day = targetDate.getDate().toString().padStart(2, '0');
    const hours = targetDate.getHours().toString().padStart(2, '0');
    const minutes = targetDate.getMinutes().toString().padStart(2, '0');
    return `${month}-${day} ${hours}:${minutes}`;
  }

  const diffSeconds = Math.floor(diffMs / 1000);
  const diffMinutes = Math.floor(diffSeconds / 60);
  const diffHours = Math.floor(diffMinutes / 60);

  // x秒前（60秒内）
  if (diffSeconds < 60) {
    return `${diffSeconds}秒前`;
  }
  
  // x分钟前（60分钟内）
  if (diffMinutes < 60) {
    return `${diffMinutes}分钟前`;
  }
  
  // x小时前（今天内）
  return `${diffHours}小时前`;
}

/**
 * 判断两个日期是否为同一天
 * @param date1 日期1
 * @param date2 日期2
 * @returns 是否为同一天
 */
function isSameDay(date1: Date, date2: Date): boolean {
  return date1.getFullYear() === date2.getFullYear() &&
         date1.getMonth() === date2.getMonth() &&
         date1.getDate() === date2.getDate();
} 